/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Servlets;

import Utilidades.Constantes;
import com.itextpdf.text.BaseColor;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Date;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.FontFactory;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.FileInputStream;
import java.io.InputStream;
import org.apache.commons.io.IOUtils;

/**
 *
 * @author 727859
 */
@WebServlet(name = "CreacionPlantillas", urlPatterns = {"/CreacionPlantillas"})
public class CreacionPlantillas extends HttpServlet {

    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        FileOutputStream outPutStream;
        byte[] bytes;
       InputStream inputStream;
        String ruta = "";
        try {
            OutputStream file = new FileOutputStream(new File("D:\\" + request.getParameter("asignatura") + "_" + request.getParameter("codigo") + ".pdf"));
            
            Document document = new Document();
            PdfWriter.getInstance(document, file);
            
            document.open();
            Paragraph parrafo = new Paragraph();
            parrafo.setAlignment(Paragraph.ALIGN_CENTER);
            parrafo.setFont(FontFactory.getFont("Sans", 20, Font.BOLD, BaseColor.BLUE));
            parrafo.add("Plantilla fd70");
            try {
                //Agregamos el texto al documento
                document.add(parrafo);

                //Agregamos un salto de linea
                document.add(new Paragraph(" "));

                //Agregamos la tabla al documento haciendo 
                //la llamada al método tabla()
                document.add(tabla(request, response));
            } catch (DocumentException ex) {
                ex.getMessage();
            }
            
            document.close();
            file.close();
            
            File archivo = new File("D:\\" + request.getParameter("asignatura") + "_" + request.getParameter("codigo") + ".pdf");
                inputStream = new FileInputStream(archivo);      
                bytes = IOUtils.toByteArray(inputStream);
                response.setHeader("Content-disposition","attachment; filename="+archivo.getName());
                response.getOutputStream().write(bytes);
                response.getOutputStream().close();
            
            
            
        } catch (Exception e) {
            
            e.printStackTrace();
        }
        
        request.getRequestDispatcher(Constantes.MENSAJE_CREACION).forward(request, response);
        
    }

    //Método para crear la tabla
    public static PdfPTable tabla(HttpServletRequest request, HttpServletResponse response) {
        //Instanciamos una tabla de 4 columnas
        PdfPTable tabla = new PdfPTable(4);

        //Declaramos un objeto para manejar las celdas
        PdfPCell celda;

        Paragraph parrafo = new Paragraph();
            parrafo.setAlignment(Paragraph.ALIGN_CENTER);
            parrafo.setFont(FontFactory.getFont("Sans", 13, Font.BOLD, BaseColor.BLACK));
            parrafo.add("                                1- IDENTIFICACION:");
        
        //Agregamos una frase a la celta
        celda = new PdfPCell(new Phrase(parrafo));
        
        //La celda tomará tres espacios horizontales
        celda.setColspan(4);
        //Agregamos la celda a la tabla
        tabla.addCell(celda);
        
        
        celda = new PdfPCell(new Phrase("PROGRAMA ACADEMICO"));
        celda.setColspan(2);
        tabla.addCell(celda);
        
        celda = new PdfPCell(new Phrase(request.getParameter("programa")));
        celda.setColspan(2);
        tabla.addCell(celda);
        
        celda = new PdfPCell(new Phrase("ASIGNATURA"));
        celda.setColspan(2);
        tabla.addCell(celda);
        
        celda = new PdfPCell(new Phrase(request.getParameter("asignatura")));
        celda.setColspan(2);
        tabla.addCell(celda);
        
         celda = new PdfPCell(new Phrase("CODIGO"));
       
        tabla.addCell(celda);
        
        celda = new PdfPCell(new Phrase(request.getParameter("codigo")));
        
        tabla.addCell(celda);
        
         celda = new PdfPCell(new Phrase("CREDITOS"));
        
        tabla.addCell(celda);
        
        celda = new PdfPCell(new Phrase(request.getParameter("creditos")));
       
        tabla.addCell(celda);
        
        ////
        celda = new PdfPCell(new Phrase("INTENSIDAD HORARIA"));
       
        tabla.addCell(celda);
        
        celda = new PdfPCell(new Phrase(request.getParameter("intensidad")));
        
        tabla.addCell(celda);
        
         celda = new PdfPCell(new Phrase("DISTRIBUCION HORARIA"));
        
        tabla.addCell(celda);
        
        celda = new PdfPCell(new Phrase(request.getParameter("distribucion")));
       
        tabla.addCell(celda);
        
        ////
        
        celda = new PdfPCell(new Phrase("PRERREQUISITOS"));
        celda.setColspan(2);
        tabla.addCell(celda);
        
        celda = new PdfPCell(new Phrase(request.getParameter("prerequisitos")));
        celda.setColspan(2);
        tabla.addCell(celda);
         /////
        
        celda = new PdfPCell(new Phrase("CORREQUISITOS"));
        celda.setColspan(2);
        tabla.addCell(celda);
        
        celda = new PdfPCell(new Phrase(request.getParameter("correquisitos")));
        celda.setColspan(2);
        tabla.addCell(celda);
        
        ////
        
         celda = new PdfPCell(new Phrase("ULTIMA ACTUALIZACION"));
        celda.setColspan(2);
        tabla.addCell(celda);
        
        celda = new PdfPCell(new Phrase(request.getParameter("actualizacion")));
        celda.setColspan(2);
        tabla.addCell(celda);
        
        ///
        
        Paragraph parrafoMision = new Paragraph();
            parrafoMision.setAlignment(Paragraph.ALIGN_CENTER);
            parrafoMision.setFont(FontFactory.getFont("Sans", 13, Font.BOLD, BaseColor.BLACK));
            parrafoMision.add("                                       2- MISION:");
        
        //Agregamos una frase a la celta
        celda = new PdfPCell(new Phrase(parrafoMision));
        
        //La celda tomará tres espacios horizontales
        celda.setColspan(4);
        //Agregamos la celda a la tabla
        tabla.addCell(celda);
        
        celda = new PdfPCell(new Phrase(request.getParameter("mision")));
        celda.setColspan(4);
        tabla.addCell(celda);
        
        ///////
        
        Paragraph parrafoPresentacion = new Paragraph();
            parrafoPresentacion.setAlignment(Paragraph.ALIGN_CENTER);
            parrafoPresentacion.setFont(FontFactory.getFont("Sans", 13, Font.BOLD, BaseColor.BLACK));
            parrafoPresentacion.add("                           3- PRESENTACION DE LA ASIGNATURA:");
        
        //Agregamos una frase a la celta
        celda = new PdfPCell(new Phrase(parrafoPresentacion));
        
        //La celda tomará tres espacios horizontales
        celda.setColspan(4);
        //Agregamos la celda a la tabla
        tabla.addCell(celda);
        
        celda = new PdfPCell(new Phrase(request.getParameter("presentacion")));
        celda.setColspan(4);
        tabla.addCell(celda);
        
        ///////
        
        Paragraph parrafoJustificacion = new Paragraph();
            parrafoJustificacion.setAlignment(Paragraph.ALIGN_CENTER);
            parrafoJustificacion.setFont(FontFactory.getFont("Sans", 13, Font.BOLD, BaseColor.BLACK));
            parrafoJustificacion.add("                                4- JUSTIFICACION:");
        
        //Agregamos una frase a la celta
        celda = new PdfPCell(new Phrase(parrafoJustificacion));
        
        //La celda tomará tres espacios horizontales
        celda.setColspan(4);
        //Agregamos la celda a la tabla
        tabla.addCell(celda);
        
        celda = new PdfPCell(new Phrase(request.getParameter("justificacion")));
        celda.setColspan(4);
        tabla.addCell(celda);
        
        ///////
        
        Paragraph parrafoObjetivo = new Paragraph();
            parrafoObjetivo.setAlignment(Paragraph.ALIGN_CENTER);
            parrafoObjetivo.setFont(FontFactory.getFont("Sans", 13, Font.BOLD, BaseColor.BLACK));
            parrafoObjetivo.add("                           5- OBJETIVOS DE LA ASIGNATURA:");
        
        //Agregamos una frase a la celta
        celda = new PdfPCell(new Phrase(parrafoObjetivo));
        
        //La celda tomará tres espacios horizontales
        celda.setColspan(4);
        //Agregamos la celda a la tabla
        tabla.addCell(celda);
        
        ///////
        
        Paragraph parrafoGenerales = new Paragraph();
            parrafoGenerales.setAlignment(Paragraph.ALIGN_CENTER);
            parrafoGenerales.setFont(FontFactory.getFont("Sans", 13, Font.BOLD, BaseColor.BLACK));
            parrafoGenerales.add("                          5.1- OBJETIVOS GENERALES:");
        
        //Agregamos una frase a la celta
        celda = new PdfPCell(new Phrase(parrafoGenerales));
        
        //La celda tomará tres espacios horizontales
        celda.setColspan(4);
        //Agregamos la celda a la tabla
        tabla.addCell(celda);
        
        celda = new PdfPCell(new Phrase(request.getParameter("generales")));
        celda.setColspan(4);
        tabla.addCell(celda);
        
        ///////
        
        Paragraph parrafoEspecificos = new Paragraph();
            parrafoEspecificos.setAlignment(Paragraph.ALIGN_CENTER);
            parrafoEspecificos.setFont(FontFactory.getFont("Sans", 13, Font.BOLD, BaseColor.BLACK));
            parrafoEspecificos.add("                          5.2- OBJETIVOS ESPECIFICOS:");
        
        //Agregamos una frase a la celta
        celda = new PdfPCell(new Phrase(parrafoEspecificos));
        
        //La celda tomará tres espacios horizontales
        celda.setColspan(4);
        //Agregamos la celda a la tabla
        tabla.addCell(celda);
        
        celda = new PdfPCell(new Phrase(request.getParameter("especificos")));
        celda.setColspan(4);
        tabla.addCell(celda);
        
         ///////
        
        Paragraph parrafoCompetencias = new Paragraph();
            parrafoCompetencias.setAlignment(Paragraph.ALIGN_CENTER);
            parrafoCompetencias.setFont(FontFactory.getFont("Sans", 13, Font.BOLD, BaseColor.BLACK));
            parrafoCompetencias.add("                          6- COMPETENCIAS GENERALES:");
        
        //Agregamos una frase a la celta
        celda = new PdfPCell(new Phrase(parrafoCompetencias));
        
        //La celda tomará tres espacios horizontales
        celda.setColspan(4);
        //Agregamos la celda a la tabla
        tabla.addCell(celda);
        
        celda = new PdfPCell(new Phrase(request.getParameter("competencias")));
        celda.setColspan(4);
        tabla.addCell(celda);
        ///////
        
        Paragraph parrafoContenidos = new Paragraph();
            parrafoContenidos.setAlignment(Paragraph.ALIGN_CENTER);
            parrafoContenidos.setFont(FontFactory.getFont("Sans", 13, Font.BOLD, BaseColor.BLACK));
            parrafoContenidos.add("                          6- CONTENIDOS POR UNIDAD:");
        
        //Agregamos una frase a la celta
        celda = new PdfPCell(new Phrase(parrafoContenidos));
        
        //La celda tomará tres espacios horizontales
        celda.setColspan(4);
        //Agregamos la celda a la tabla
        tabla.addCell(celda);
        
        ///////
        
        Paragraph parrafoUnidad1 = new Paragraph();
            parrafoUnidad1.setAlignment(Paragraph.ALIGN_CENTER);
            parrafoUnidad1.setFont(FontFactory.getFont("Sans", 13, Font.BOLD, BaseColor.BLACK));
            parrafoUnidad1.add("                              UNIDAD 1:");
        
        //Agregamos una frase a la celta
        celda = new PdfPCell(new Phrase(parrafoUnidad1));
        
        //La celda tomará tres espacios horizontales
        celda.setColspan(4);
        //Agregamos la celda a la tabla
        tabla.addCell(celda);
        
        celda = new PdfPCell(new Phrase(request.getParameter("unidad1")));
        celda.setColspan(4);
        tabla.addCell(celda);
        
        ///////
        
         Paragraph parrafoUnidad2 = new Paragraph();
            parrafoUnidad2.setAlignment(Paragraph.ALIGN_CENTER);
            parrafoUnidad2.setFont(FontFactory.getFont("Sans", 13, Font.BOLD, BaseColor.BLACK));
            parrafoUnidad2.add("                              UNIDAD 2:");
        
        //Agregamos una frase a la celta
        celda = new PdfPCell(new Phrase(parrafoUnidad2));
        
        //La celda tomará tres espacios horizontales
        celda.setColspan(4);
        //Agregamos la celda a la tabla
        tabla.addCell(celda);
        
        celda = new PdfPCell(new Phrase(request.getParameter("unidad2")));
        celda.setColspan(4);
        tabla.addCell(celda);
        
        ///////
        
         Paragraph parrafoUnidad3 = new Paragraph();
            parrafoUnidad3.setAlignment(Paragraph.ALIGN_CENTER);
            parrafoUnidad3.setFont(FontFactory.getFont("Sans", 13, Font.BOLD, BaseColor.BLACK));
            parrafoUnidad3.add("                                UNIDAD 3:");
        
        //Agregamos una frase a la celta
        celda = new PdfPCell(new Phrase(parrafoUnidad3));
        
        //La celda tomará tres espacios horizontales
        celda.setColspan(4);
        //Agregamos la celda a la tabla
        tabla.addCell(celda);
        
        celda = new PdfPCell(new Phrase(request.getParameter("unidad3")));
        celda.setColspan(4);
        tabla.addCell(celda);
        
        ///////
        
        Paragraph parrafoUnidad4 = new Paragraph();
            parrafoUnidad4.setAlignment(Paragraph.ALIGN_CENTER);
            parrafoUnidad4.setFont(FontFactory.getFont("Sans", 13, Font.BOLD, BaseColor.BLACK));
            parrafoUnidad4.add("                               UNIDAD 4:");
        
        //Agregamos una frase a la celta
        celda = new PdfPCell(new Phrase(parrafoUnidad4));
        
        //La celda tomará tres espacios horizontales
        celda.setColspan(4);
        //Agregamos la celda a la tabla
        tabla.addCell(celda);
        
        celda = new PdfPCell(new Phrase(request.getParameter("unidad4")));
        celda.setColspan(4);
        tabla.addCell(celda);
        
         ///////
        
        Paragraph parrafoEstrategias = new Paragraph();
            parrafoEstrategias.setAlignment(Paragraph.ALIGN_CENTER);
            parrafoEstrategias.setFont(FontFactory.getFont("Sans", 13, Font.BOLD, BaseColor.BLACK));
            parrafoEstrategias.add("  Estrategias Metodologicas que contribuyen al logro de los objetivos y de las competencias :");
        
        //Agregamos una frase a la celta
        celda = new PdfPCell(new Phrase(parrafoEstrategias));
        
        //La celda tomará tres espacios horizontales
        celda.setColspan(4);
        //Agregamos la celda a la tabla
        tabla.addCell(celda);
        
        celda = new PdfPCell(new Phrase(request.getParameter("estrategias")));
        celda.setColspan(4);
        tabla.addCell(celda);
        
        ///////
        
        Paragraph parrafoRecursos = new Paragraph();
            parrafoRecursos.setAlignment(Paragraph.ALIGN_CENTER);
            parrafoRecursos.setFont(FontFactory.getFont("Sans", 13, Font.BOLD, BaseColor.BLACK));
            parrafoRecursos.add("                              Recursos :");
        
        //Agregamos una frase a la celta
        celda = new PdfPCell(new Phrase(parrafoRecursos));
        
        //La celda tomará tres espacios horizontales
        celda.setColspan(4);
        //Agregamos la celda a la tabla
        tabla.addCell(celda);
        
        ///////
        
        Paragraph parrafoEvaluacion = new Paragraph();
            parrafoEvaluacion.setAlignment(Paragraph.ALIGN_CENTER);
            parrafoEvaluacion.setFont(FontFactory.getFont("Sans", 13, Font.BOLD, BaseColor.BLACK));
            parrafoEvaluacion.add("                                  EVALUACION :");
        
        //Agregamos una frase a la celta
        celda = new PdfPCell(new Phrase(parrafoEvaluacion));
        
        //La celda tomará tres espacios horizontales
        celda.setColspan(4);
        //Agregamos la celda a la tabla
        tabla.addCell(celda);
        
        celda = new PdfPCell(new Phrase(request.getParameter("evaluacion")));
        celda.setColspan(4);
        tabla.addCell(celda);
        
       ///////
        
        Paragraph parrafoBibliografia = new Paragraph();
            parrafoBibliografia.setAlignment(Paragraph.ALIGN_CENTER);
            parrafoBibliografia.setFont(FontFactory.getFont("Sans", 13, Font.BOLD, BaseColor.BLACK));
            parrafoBibliografia.add("                            BIBLIGRAFIA:");
        
        //Agregamos una frase a la celta
        celda = new PdfPCell(new Phrase(parrafoBibliografia));
        
        //La celda tomará tres espacios horizontales
        celda.setColspan(4);
        //Agregamos la celda a la tabla
        tabla.addCell(celda);
        
        celda = new PdfPCell(new Phrase(request.getParameter("bibliografia")));
        celda.setColspan(4);
        tabla.addCell(celda);
        
         ///////
        
        Paragraph parrafoTematico = new Paragraph();
            parrafoTematico.setAlignment(Paragraph.ALIGN_CENTER);
            parrafoTematico.setFont(FontFactory.getFont("Sans", 13, Font.BOLD, BaseColor.BLACK));
            parrafoTematico.add("                     12- CONTENIDO TEMATICO CLASE A CLASE:");
        
        //Agregamos una frase a la celta
        celda = new PdfPCell(new Phrase(parrafoTematico));
        
        //La celda tomará tres espacios horizontales
        celda.setColspan(4);
        //Agregamos la celda a la tabla
        tabla.addCell(celda);
        
        celda = new PdfPCell(new Phrase(request.getParameter("contenidoTematico")));
        celda.setColspan(4);
        tabla.addCell(celda);
        return tabla;
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
